<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>我写过的相关内容</h3>
<ul>
  <li><a href="http://mazhaoyang.cn/index.php/Home/ArticleList/ArticleArticle/sid/51/aid/179.html" target="_blank">php部分</a></li>
  <li><a href="http://mazhaoyang.cn/index.php/Home/ArticleList/ArticleArticle/sid/53/aid/180.html" target="_blank">vue前端部分</a></li>
  <li><a href="http://mazhaoyang.cn/demos/report/#/login" target="_blank">示例看这里(用户名：夏天，密码：123456)</a></li>
  <li><a href="https://github.com/zhaoyangMa123456/vueAndElementUi_report" target="_blank">github源码看这里</a></li>
</ul>

<h3>session校验的原理</h3>
<p>session校验，就是在用户第一次登录之后，服务端生成一个和用户id绑定的串码，然后将这个串码放到内存中，然后将串码存到cookie里。客户端第二次请求的时候，
通过识别cookie中是否存在session以及session是否正确，来进行登录校验
</p>
<h3>缺点有下面这几个</h3>
<ul>
  <li>1.内存会越来越大</li>
  <li>2.存在cookie里的话，容易收到csrf攻击，<a target="_blank" href="http://mazhaoyang.cn/index.php/Home/ArticleList/ArticleArticle/sid/58/aid/170.html">关于csrf攻击看这里</a></li>
  <li>3.在用ngix的时候，由于只能在特定服务器内存中才有对应的session，会限制ngix的性能</li>
</ul>
<h3>jwt构成</h3>
<p>
  jwt分成三个部分，前两部分是base64转码的字符串，第三部分是通过前两部分和一个密钥，进行加密生成的。
</p>
<ul>
  <li>
    第一部分$header基本上是固定的，不用改它，就是个声明。
  </li>
  <li>
    $playload是涉及到的参数，都是自定义的，转成base64，基本上跟明文没什么区别。就是把自己想用的一些不是特别敏感的参数放上
  </li>
  <li>
    $signature这部分才是重头戏，他是根据前两个+自己定义的secret加密成的token。之所以要用前两个参数参与加密，就是防止
    前两个参数被私自篡改。如果被改之后，第三个参数由于加密规则不符，所以可以失败
  </li>
</ul>
<h3>jwt校验原理</h3>
<p>放在一个自定义属性里，每次都发送到服务器，跟身份证似的。由于第三部分是有前两部分加密形成的，这样保证了自己解析到的信息不是被篡改过的。</p>
<h3>优点</h3>
<p>感觉跟http的无状态链接是一个意思，请求完就完事，不拖泥带水，很灵活</p>
<h3>缺点</h3>
<p>省去了session消耗内存的过程，但是每次请求接口都要有一步校验和解密的过程，加大了服务器的运算量。</p>
</body>
</html>
